package br.com.dataphonebr.dao.impl;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import br.com.dataphonebr.entity.Grupo;
import br.com.dataphonebr.enumerator.TipoAtividade;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
 
public class GrupoDao extends GenericDaoImpl<Grupo> {
	
	private final String CODIGO = "codigo";
	private final String NOME = "nome";
	private final String DESCRICAO = "descricao";
	private final String ENVIA_SMS = "enviaSMS";
	
	public GrupoDao(Context context) {
		super(context);
	}
	
	@Override
	public String getTableName() {
		return "GRUPO";
	}

	@Override
	public String getColumnHack() {
		return CODIGO;
	}

	@Override
	public ContentValues getContentValues(Grupo entity) {
		ContentValues grupoValues = new ContentValues();
		grupoValues.put(NOME, entity.getNome());
		grupoValues.put(DESCRICAO, entity.getDescricao());
		grupoValues.put(ENVIA_SMS, entity.getEnviaSMS());
		return grupoValues;
	}

	@Override
	public String getScriptCreateTable() {
		StringBuffer query = new StringBuffer();
		query.append(" CREATE TABLE ");
		query.append(getTableName());
		query.append(" ( ");
		query.append(CODIGO).append(" INTEGER PRIMARY KEY AUTOINCREMENT,");
		query.append(NOME).append(" TEXT not null,");
		query.append(DESCRICAO).append(" TEXT not null,");
		query.append(ENVIA_SMS).append(" boolean not null default false");
		query.append(" ); ");
		return query.toString();
	}
	
	public List<Grupo> selectByName(String nome){
		StringBuffer query = new StringBuffer();
		query.append(" SELECT * FROM ");
		query.append(getTableName());
		query.append(" WHERE ");
		query.append(" UPPER(nome) like '% ").append(nome).append("%'");
		query.append(" ORDER BY nome");
		return getList(query.toString(), null);
	}

	@Override
	protected String getScriptCreateIndex() {
		return createIndex(NOME, true);
	}

	@Override
	protected String getScriptForeignKey() {
		return null;
	}
	
	@Override
	public List<Grupo> selectAll() {
		return sortByName(super.selectAll());
	}
	
	public List<Grupo> sortByName(List<Grupo> list){
		if (list != null && !list.isEmpty()){
			Comparator<Grupo> comparator = new Comparator<Grupo>() {
				@Override
				public int compare(Grupo lhs, Grupo rhs) {
					return lhs.getNome().compareToIgnoreCase(rhs.getNome());
				}
			};
			Collections.sort(list, comparator);
		}
		return list;
	}

	@Override
	protected Grupo cursorToEntity(Cursor cursor) {
		Long id = cursor.getLong(0);
		String name = cursor.getString(1);
		String notes = cursor.getString(2);
		boolean sms = getBooleanValueFromCursor(cursor.getString(3));
		Grupo grupo = new Grupo(id, name, notes, sms, true, null, TipoAtividade.GERAL);//TODO: acertar
		return grupo;
	}

	@Override
	public String getAlterTableScript() {
		// TODO Auto-generated method stub
		return null;
	}
}
